<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Benchmarking Class : CodeIgniter User Guide</title>

<style type='text/css' media='all'>
@import url('../userguide.css');
</style>
<link rel='stylesheet' type='text/css' media='all'
	href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv='pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

	<!-- START NAVIGATION -->
	<div id="nav">
		<div id="nav_inner">
			<script type="text/javascript">create_menu('../');</script>
		</div>
	</div>
	<div id="nav2">
		<a name="top"></a><a href="javascript:void(0);"
			onclick="myHeight.toggle();"><img
			src="../images/nav_toggle_darker.jpg" width="154" height="43"
			border="0" title="Toggle Table of Contents"
			alt="Toggle Table of Contents" /></a>
	</div>
	<div id="masthead">
		<table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
			<tr>
				<td><h1>CodeIgniter User Guide Version 2.1.3</h1></td>
				<td id="breadcrumb_right"><a href="../toc.html">Table of
						Contents Page</a></td>
			</tr>
		</table>
	</div>
	<!-- END NAVIGATION -->


	<!-- START BREADCRUMB -->
	<table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
		<tr>
			<td id="breadcrumb"><a href="http://codeigniter.com/">CodeIgniter
					Home</a> &nbsp;&#8250;&nbsp; <a href="../index.html">User Guide
					Home</a> &nbsp;&#8250;&nbsp; Benchmarking Class</td>
			<td id="searchbox"><form method="get"
					action="http://www.google.com/search">
					<input type="hidden" name="as_sitesearch" id="as_sitesearch"
						value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input
						type="text" class="input" style="width: 200px;" name="q" id="q"
						size="31" maxlength="255" value="" />&nbsp;<input type="submit"
						class="submit" name="sa" value="Go" />
				</form></td>
		</tr>
	</table>
	<!-- END BREADCRUMB -->

	<br clear="all" />


	<!-- START CONTENT -->
	<div id="content">


		<h1>Benchmarking Class</h1>

		<p>CodeIgniter has a Benchmarking class that is always active,
			enabling the time difference between any two marked points to be
			calculated.</p>

		<p class="important">
			<strong>Note:</strong> This class is initialized automatically by the
			system so there is no need to do it manually.
		</p>


		<p>In addition, the benchmark is always started the moment the
			framework is invoked, and ended by the output class right before
			sending the final view to the browser, enabling a very accurate
			timing of the entire system execution to be shown.</p>


		<h3>Table of Contents</h3>

		<ul>
			<li><a href="#using">Using the Benchmark Class</a></li>
			<li><a href="#profiler">Profiling Your Benchmark Points</a></li>
			<li><a href="#execution">Displaying Total Execution Time</a></li>
			<li><a href="#memory">Displaying Memory Consumption</a></li>
		</ul>



		<a name="using"></a>
		<h2>Using the Benchmark Class</h2>

		<p>
			The Benchmark class can be used within your <a
				href="../general/controllers.html">controllers</a>, <a
				href="../general/views.html">views</a>, or your <a
				href="../general/models.html">models</a>. The process for usage is
			this:
		</p>

		<ol>
			<li>Mark a start point</li>
			<li>Mark an end point</li>
			<li>Run the "elapsed time" function to view the results</li>
		</ol>

		<p>Here's an example using real code:</p>

		<code>
			$this->benchmark->mark('code_start');<br /> <br /> // Some code
			happens here<br /> <br /> $this->benchmark->mark('code_end');<br />
			<br /> echo $this->benchmark->elapsed_time('code_start',
			'code_end');
		</code>

		<p class="important">
			<strong>Note:</strong> The words "code_start" and "code_end" are
			arbitrary. They are simply words used to set two markers. You can use
			any words you want, and you can set multiple sets of markers.
			Consider this example:
		</p>

		<code>
			$this->benchmark->mark('dog');<br /> <br /> // Some code happens
			here<br /> <br /> $this->benchmark->mark('cat');<br /> <br /> //
			More code happens here<br /> <br /> $this->benchmark->mark('bird');<br />
			<br /> echo $this->benchmark->elapsed_time('dog', 'cat');<br />
			echo $this->benchmark->elapsed_time('cat', 'bird');<br /> echo
			$this->benchmark->elapsed_time('dog', 'bird');
		</code>


		<a name="profiler"></a>
		<h2>Profiling Your Benchmark Points</h2>

		<p>
			If you want your benchmark data to be available to the <a
				href="../general/profiling.html">Profiler</a> all of your marked
			points must be set up in pairs, and each mark point name must end
			with
			<kbd>_start</kbd>
			and
			<kbd>_end</kbd>
			. Each pair of points must otherwise be named identically. Example:
		</p>

		<code>
			$this->benchmark->mark('my_mark
			<kbd>_start</kbd>
			');<br /> <br /> // Some code happens here...<br /> <br />
			$this->benchmark->mark('my_mark
			<kbd>_end</kbd>
			'); <br /> <br /> $this->benchmark->mark('another_mark
			<kbd>_start</kbd>
			');<br /> <br /> // Some more code happens here...<br /> <br />
			$this->benchmark->mark('another_mark
			<kbd>_end</kbd>
			');
		</code>

		<p>
			Please read the <a href="../general/profiling.html">Profiler page</a>
			for more information.
		</p>


		<a name="execution"></a>
		<h2>Displaying Total Execution Time</h2>

		<p>If you would like to display the total elapsed time from the
			moment CodeIgniter starts to the moment the final output is sent to
			the browser, simply place this in one of your view templates:</p>

		<code>&lt;?php echo $this->benchmark->elapsed_time();?&gt;</code>

		<p>
			You'll notice that it's the same function used in the examples above
			to calculate the time between two point, except you are <strong>not</strong>
			using any parameters. When the parameters are absent, CodeIgniter
			does not stop the benchmark until right before the final output is
			sent to the browser. It doesn't matter where you use the function
			call, the timer will continue to run until the very end.
		</p>

		<p>An alternate way to show your elapsed time in your view files
			is to use this pseudo-variable, if you prefer not to use the pure
			PHP:</p>
		<code>{elapsed_time}</code>

		<p class="important">
			<strong>Note:</strong> If you want to benchmark anything within your
			controller functions you must set your own start/end points.
		</p>

		<a name="memory"></a>
		<h2>Displaying Memory Consumption</h2>

		<p>If your PHP installation is configured with
			--enable-memory-limit, you can display the amount of memory consumed
			by the entire system using the following code in one of your view
			file:</p>

		<code>&lt;?php echo $this->benchmark->memory_usage();?&gt;</code>
		<p>Note: This function can only be used in your view files. The
			consumption will reflect the total memory used by the entire app.</p>

		<p>An alternate way to show your memory usage in your view files
			is to use this pseudo-variable, if you prefer not to use the pure
			PHP:</p>
		<code>{memory_usage}</code>




	</div>
	<!-- END CONTENT -->



	<div id="footer">
		<p>
			Previous Topic:&nbsp;&nbsp;<a href="../doc_style/index.html">Writing
				Documentaion</a> &nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp; <a href="#top">Top
				of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp; <a
				href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
			Next Topic:&nbsp;&nbsp;<a href="calendar.html">Calendar Class</a>
		</p>
		<p>
			<a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp;
			Copyright &#169; 2006 - 2012 &nbsp;&middot;&nbsp; <a
				href="http://ellislab.com/">EllisLab, Inc.</a>
		</p>
	</div>

</body>
</html>